import vine from '@vinejs/vine'
import type { Infer } from '@vinejs/vine/types'

const goodsSchema = vine.object({
  /** 商品外键 */
  fkGoodsId: vine.number().positive(),
  /** 购买单位外键 */
  fkBuyUnitId: vine.number().positive(),
  /** 标准单位外键 */
  fkStandardUnitId: vine.number().positive(),
  /** 供应商外键 */
  fkSupplierId: vine.number().positive(),
  /** 购买置换数量 */
  buyUnitNumber: vine.number().positive(),
  /** 购买单位数量 */
  buyUnitQuantity: vine.number().positive(),
  /** 标准单位数量 */
  standardUnitQuantity: vine.number().positive(),
  /** 单位单价 */
  unitPrice: vine.number().positive(),
  /** 总价格 */
  totalAmount: vine.number().positive(),
  /** 备注 */
  memo: vine.string().maxLength(255).optional(),
})
export type StockDetail = Infer<typeof goodsSchema>

const createStockInSchema = vine.object({
  /** 会员外键 */
  fkMemberId: vine.number().positive(),
  /** 库存方式 */
  fkStockMethodId: vine.number().positive(),
  /** 单据仓库 */
  fkWarehouseId: vine.number().positive(),
  /** 单据日期 */
  billDate: vine.date(),
  /** 入库明细 */
  stockInDetail: vine.array(goodsSchema),
  /** 单据状态 */
  status: vine.number().range([0, 1]).optional(),
  /** 备注 */
  memo: vine.string().maxLength(255).optional(),
})

const createStockOutSchema = vine.object({
  /** 会员外键 */
  fkMemberId: vine.number().positive(),
  /** 库存方式 */
  fkStockMethodId: vine.number().positive(),
  /** 单据仓库 */
  fkWarehouseId: vine.number().positive(),
  /** 单据日期 */
  billDate: vine.date(),
  /** 入库明细 */
  stockOutDetail: vine.array(goodsSchema),
  /** 单据状态 */
  status: vine.number().range([0, 1]).optional(),
  /** 备注 */
  memo: vine.string().maxLength(255).optional(),
})

export const createStockInValidator = vine.compile(createStockInSchema)
export type CreateStockInValidator = Infer<typeof createStockInSchema> & Record<any, any>
export const createStockOutValidator = vine.compile(createStockOutSchema)
export type CreateStockOutValidator = Infer<typeof createStockOutSchema> & Record<any, any>
